iT邦幫忙

2023 iThome 鐵人賽

DAY 10
0
自我挑戰組

和地鼠做30天好朋友系列 第 11

地鼠 init 的魔法

  • 分享至 

  • xImage
  •  

嗚嗚嗚... 不小心斷賽了😢

在地鼠界中,有一個特殊的方法,他叫做「init」!

換句我們的行話裡,這用於初始化的步驟。無需額外的動作,在程序運行時自動執行。通常我們會用在執行一些初始化操作,像是設置全域變數、設定、Database相關等。以下就讓我來細細道來 💪

首先,Show you simple demo。

package main

import "fmt"

func init() {
	fmt.Println("Init first")
}

func main() {
	fmt.Println("Main Second")
}

來,你猜猜結果會是?
.
.
.
我的程式都已經告訴你答案了😅

Init first
Main Second

init 會首先被執行、再來才會是main !

你看吧!是不是很特別的魔法?以下讓我們看個更實際的例子。

剛剛提到了init常用於載入設定,以下就是這段程式碼的demo
我們先準備一個叫做config.txt的文件

host=localhost
port=3306
database=demo
user=root
password=pass

接下來,程式碼底家!

package main

import (
	"fmt"
	"strings"
	"io/ioutil"
)

var config map[string]string

func init() {
	// 載入
	data, err := ioutil.ReadFile("config.txt")
	if err != nil {
		fmt.Println("Error: ", err)
		return
	}
	// 解析
	lines := strings.Split(string(data), "\n")
	config = make(map[string]string)
	for _, line := range lines {
		parts := strings.Split(line, "=")
		if len(parts) == 2 {
			key := strings.TrimSpace(parts[0])
			value := strings.TrimSpace(parts[1])
			config[key] = value
		}
	}
	fmt.Println("Configure Loaded")
}

func main() {
	// 在這裡印出資訊
	for key, value := range config {
		fmt.Printf("Key: %s, Value %s\n", key,value)
	}
}

在這裡,我們在init函數中讀取文件,然後存到在config中。這樣,我們就可以在main函數中使用了。Oh Ya ✌️

總而言之,init方法是個方便的初始化魔法,它能在程式運行時自動執行,可用於執行各種初始化操作,使程序更具靈活性和可維護性,甚至也可以搭配go build tag 讓我們根據環境來載入不同的設定!以方便我們能客制出不同的CICD流程與初始化


上一篇
地鼠和CSV
下一篇
地鼠也懂OO之前:指標
系列文
和地鼠做30天好朋友12
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言